//  TSZOAuthViewController.swift
//  微博天下
import UIKit
import SVProgressHUD
class TSZOAuthViewController: UIViewController,UIWebViewDelegate {

    //懒加载webView
    private lazy var webView = UIWebView()
    override func loadView() {
        view = webView
        webView.delegate = self
        title = "新浪微博"
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "关闭", style: UIBarButtonItemStyle.Plain, target: self, action: "close")
    }
    
    //关闭 ,
    func close(){
        SVProgressHUD.dismiss()
        dismissViewControllerAnimated(true, completion: nil)
    }
    //在webView 中显示当前的授权界面
    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        
        webView.loadRequest(NSURLRequest(URL: TSZNetWorkTools.sharedNetWorkTools.oauthURL))
    }
    
    //MARK - 实现UIWebViewDelegate ，加载一个转圈的延迟
    func webViewDidStartLoad(webView: UIWebView) {

        SVProgressHUD.show()
    }
    //释放 ，网页加载完成
    func webViewDidFinishLoad(webView: UIWebView) {

        SVProgressHUD.dismiss()
    }
    
    /**
    1. 如果请求的 URL 包含 回调地址，需要判断参数，否则继续加载
    2. 如果请求参数中，包含 code，可以从请求的 url 中获得请求码
    */
    //页面是否响应成功  ,这个方法只要是加载页面就回去响应 ，第一次加载登录界面的时间，request返回的是  https://oAuth....  ,第二次就request返回的是同意授权 （baidu.com..） 重定向的url
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        let urlString = request.URL!.absoluteString
        //判断请求的url是否包含回调路径 ,hasPrefix 是否以。。。开头
        if !urlString.hasPrefix(TSZNetWorkTools.sharedNetWorkTools.redirectURI){
            return true
        }
        //Request.Url.Query
        
        //string 类型。指当前页面 URL 的查询字符串，从“?”开始。  注意if 和grard的区别
        if let query = request.URL?.query where query.hasPrefix("code=")
        {
            let code = query.substringFromIndex("code=".endIndex)
            loadAccessToken(code)
        }else{
            print("取消授权")
            close()
        }
        return false
    }
    //得到访问令牌根据授权码
    private func loadAccessToken(code:String){
       
        TSZNetWorkTools.sharedNetWorkTools.loadAccessToken(code) { (result, error) -> () in
            if error != nil || result == nil{
                self.netError()
                return
                }
            // 字典转模型
            // 1. 用 token 获取的信息创建用户账户模型
            // 2. 异步加载用户信息。保存用户信息(模型中完成)
            TSZUserAcountModel(dict: result!).loadUserInfo({ (error) -> () in
                if error != nil{
                    self.netError()
                    return
                }
                //发送通知直接跳入主界面
                NSNotificationCenter.defaultCenter().postNotificationName(TSZRootViewControllerSwitchNotification, object: true)
            })
            }
        }
    
    private func netError(){
        SVProgressHUD.showInfoWithStatus("网络不给力")
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW,1 * Int64(NSEC_PER_SEC)),dispatch_get_main_queue()){
            self.close()
        }
    }

}